/**
 * 权限表
 * 权限分类，便于归类所有的权限
 */
const adminPermissionClassify = (sequelize, DataTypes) => {
  const AdminPermissionClassify = sequelize.define(
    'adminPermissionClassify',
    {
      name: {
        type: DataTypes.STRING,
        unique: true,
        allowNull: false,
        validate: {
          notEmpty: { args: true, msg: '权限分类名称必填' },
          len: { args: [2, 30], msg: '权限分类名称需要在2到30位之间' }
        }
      },
      description: {
        type: DataTypes.STRING,
        unique: false,
        allowNull: true
      }
    },
    {
      freezeTableName: true, // 自定义表名
      tableName: 'admin_permission_classify',
      timestamps: true, // 是否需要增加createdAt、updatedAt、deletedAt字段
      underscored: true // 字段使用下划线，而不是驼峰式命名
      // 'paranoid': true // 设置paranoid为true（此种模式下，删除数据时不会进行物理删除，而是设置deletedAt为当前时间
    }
  );

  /**
   * 权限分类名称查重
   * @param {String} filed 需要被验证的字段
   * @param {String} value 需要被验证的字段的值
   * @param {*} self 去否忽略自己开始验证
   */
  AdminPermissionClassify.isRepeat = async (filed, value, self) => {
    const query = {};
    query[filed] = value;
    if (self) {
      const classify = await AdminPermissionClassify.findAll({
        where: query,
        attributes: ['id']
      });
      return classify.length >= 2;
    } else {
      return !!(await AdminPermissionClassify.findOne({
        where: query,
        attributes: ['id']
      }));
    }
  };

  return AdminPermissionClassify;
};

export default adminPermissionClassify;
